import type { CompanyDto, InsureInfoDto, PayProjectDto, ProjectDto } from './type'
import request from '@/api/request'
import type { PageDto, PageResDto } from '@/api/types'

/**
 * 获取加入的项目列表
 *
 * @param data 包含 id 和分页信息的参数对象
 * @param data.id 用户userId
 * @param data.PageDto 分页信息对象
 * @returns 返回一个 Promise 对象，包含按页返回的 ProjectDto 类型的项目列表
 */
export function getMonthDayProjectList(data: {
    id: number
} & Partial<PageDto>) {
    return request.get('/api/v1/blue/blue-sign/month-day-project', data) as Promise<PageResDto<ProjectDto>>
}

/**
 * 获取二维码缓存
 *
 * @param data 包含键值的对象
 * @param data.key 键值
 * @returns 返回Promise<string>类型，表示获取到的二维码缓存
 */
export function getQrcodeCache(data: {
    key: number
}) {
    return request.get('/api/v1/blue/project/get-cache', data) as Promise<string>
}

/**
 * 获取公司名称
 *
 * @param data 包含公司ID的对象
 * @param data.companyId 公司ID
 * @returns 返回Promise对象，包含请求结果
 */
export function getCompanyName(data: {
    companyId: number
}) {
    return request.get('/api/v1/blue/pay-company', data) as Promise<CompanyDto>
}

/**
 * 加入公司通讯录
 *
 * @param data 包含公司ID和crate用户ID的对象
 * @param data.companyId 公司ID
 * @param data.createUserId crate用户ID
 * @returns 返回Promise<any>类型，表示API请求的返回结果
 */
export function joinPayAddress(data: {
    companyId: number
    createUserId: number
}) {
    return request.post('/api/v1/blue/address-book', data) as Promise<string>
}

/**
 * 获取发薪项目信息
 *
 * @param data 包含项目id的对象
 * @param data.id 包含项目id的对象发薪项目为projectId 投保项目为insuranceId
 * @returns 返回支付项目信息的Promise对象
 */
export function getPayProject(data: {
    id: number
}) {
    return request.get('/api/v1/blue/project/pay', data) as Promise<PayProjectDto>
}

/**
 * 加入发薪项目
 *
 * @param data 包含创建用户ID、用户ID、项目ID和加入类型等信息的对象
 * @param data.createUserId 创建用户ID
 * @param data.userId 用户ID
 * @param data.projectId 项目ID
 * @param data.joinType 加入类型
 * @returns 返回Promise<string>类型，表示请求的结果
 */
export function joinPayProject(data: {
    createUserId: number
    userId: number
    projectId: number
    joinType: number
}) {
    return request.post('/api/v1/blue/project/pay', data) as Promise<string>
}

export function getLongInsureInfo(data: {
    companyPlanId: number
}) {
    return request.get('/api/v1/blue/project/insur-period-info', data) as Promise<InsureInfoDto>
}

/**
 * 加入长期保保险
 *
 * @param data 拼接周期保险所需参数对象
 * @param data.key 拼接周期保险的key
 * @param data.id 拼接周期保险的id
 * @returns 返回一个Promise对象，resolve值为字符串类型，表示请求结果
 */
export function joinPeriodInsure(data: {
    key: string
    id: number
}) {
    return request.post('/api/v1/blue/project/insur-period', data) as Promise<string>
}

/**
 * 获取项目数量
 *
 * @returns 返回 Promise<number> 类型的项目数量
 */
export function getProjectCount() {
    return request.get('/api/v1/blue/blue-sign/month-day-project-count') as Promise<number>
}
